// server.go
package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
)

// 事件处理器
func requestHandler(w http.ResponseWriter, r *http.Request) {
	// 确保请求方法是POST
	if r.Method != http.MethodPost {
		http.Error(w, "请求方法不符合预定义要求", http.StatusMethodNotAllowed)
		return
	}

	// 读取请求体
	body, err := ioutil.ReadAll(r.Body)
	if err != nil {
		http.Error(w, "读取请求体失败", http.StatusBadRequest)
		return
	}
	defer r.Body.Close()

	// 打印请求体
	fmt.Printf("Received request body: %s\n", body)

	// 向客户端发送响应
	w.WriteHeader(http.StatusOK)
	// Write(data []byte):
	// 数据写入响应体。这个方法可以接受一个字节切片作为参数，并将其发送给客户端。如果数据成功写入，
	// 它会返回一个整数，表示写入的字节数。
	w.Write([]byte("Request received successfully"))
}

func main() {
	// 监听/send路径
	http.HandleFunc("/send", requestHandler)

	port := ":8080"
	fmt.Printf("服务器提供server的端口 %s\n", port)
	// 启动一个8080端口的服务器：
	// 如果 http.ListenAndServe第一个参数为空，则服务器启动后默认使用http://127.0.0.1:8080地址进行访问；
	// 如果这个函数传入的第二个参数为nil，则服务器在启动后将使用默认的多路复用器DefaultServeMux
	err := http.ListenAndServe(port, nil)
	if err != nil {
		log.Fatalf("无法提供服务: %s\n", err)
	}
}
